package com.ushine.web.component.utils;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.List;

/**
 * @Author: yls
 * @Date: 2020/10/14 9:51
 * @Description: json工具类
 * @Version 1.0
 */
@Slf4j
public class JsonUtils implements Serializable {
    /**
     * 定义jackson对象
     */
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 功能描述:
     * 〈将对象装换为json字符串〉
     *
     * @param data 需要转换的对象
     * @return : java.lang.String
     * @author : yls
     * @date : 2020/10/14 9:54
     */
    public static String objectToJson(Object data) {
        try {
            String str = MAPPER.writeValueAsString(data);
            return StringUtils.isEmpty(str) ? "" : str;
        } catch (Exception e) {
            log.info("将对象装换为json字符串异常", e);
        }
        return "";
    }

    /**
     * 功能描述:
     * 〈将json结果集转化为对象〉
     *
     * @param jsonData json数据
     * @param beanType 对象中的object类型
     * @return : T 泛型，对应转换的实体类
     * @author : yls
     * @date : 2020/10/14 10:01
     */
    public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
        try {
            return MAPPER.readValue(jsonData, beanType);
        } catch (Exception e) {
            log.info("将json结果集转化为对象异常:", e);
        }
        return null;
    }

    /**
     * 功能描述:
     * 〈将json转换为pojo对象list〉
     *
     * @param jsonData json数据
     * @param beanType 实体对象
     * @return : java.util.List<T>
     * @author : yls
     * @date : 2020/10/14 10:04
     */
    public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
        try {
            JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
            return MAPPER.readValue(jsonData, javaType);
        } catch (Exception e) {
            log.info("将json转换为pojo对象list异常:", e);
        }
        return null;
    }
}
